/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package upeu.edu.pe.dao;

/**
 *
 * @author Administrador
 */
import java.util.List;
import upeu.edu.pe.modelo.SauUsuario;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import org.hibernate.SessionFactory;

import org.springframework.stereotype.Repository;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.criterion.Expression;
import org.springframework.beans.factory.annotation.Autowired;


@Repository("SauUsuarioDao")
public class SauUsuarioDaoImpl implements SauUsuarioDao {
        protected final Log logger = LogFactory.getLog(SauUsuarioDaoImpl.class);        	
       
        @Autowired
	public SessionFactory sessionFactory;                 
        
        
       /*
	public void saveTrabajador(SivTrabajador trabajador) {          
	    try { sessionFactory.getCurrentSession().saveOrUpdate(trabajador); } 
            catch (Exception e) { logger.info("Mensage de Error en saveTrabajador() "+e.getMessage());   }
            finally{ sessionFactory.close(); }                        
	}*/
        
	@Override
	public List<SauUsuario> listUsuario() {		
		return (List<SauUsuario>) sessionFactory.getCurrentSession().createCriteria(SauUsuario.class).list();
	}

        
        
        
        
        
	@Override
	public List<SauUsuario> validarUsuario(SauUsuario user) {
        List<SauUsuario> resultado=null;   String usuario=user.getUsuario(); String clave=user.getClave();
	try {           
           resultado= (List<SauUsuario>) sessionFactory.getCurrentSession().createCriteria(SauUsuario.class)
                                                 .add(Expression.eq("usuario", usuario) )
                                                 .add(Expression.eq("clave", clave)).list();                      
            //resultado= (ArrayList<SauUsuario>) sesion.createCriteria(SauUsuario.class).list();            
           resultado= (List<SauUsuario>) sessionFactory.getCurrentSession().createSQLQuery("select * from sau_usuario ").addEntity(SauUsuario.class).list();            
            }catch (Exception e) { logger.info("Mensage de Error en validarUsuario() "+e.getMessage());   }
            finally{ sessionFactory.close(); }            
            return resultado;
	}
        
        
	@Override
	public List<SauUsuario> validaSuEntrada(SauUsuario entrada) {
        List<SauUsuario> resultado=null;
	try {           
           resultado= (List<SauUsuario>) sessionFactory.getCurrentSession().createCriteria(SauUsuario.class)
                                                 .add(Expression.eq("usuario", entrada.getUsuario()) )
                                                 .list();                      
            }catch (Exception e) { logger.info("Mensage de Error en validarTrabajador() "+e.getMessage());   }
            finally{ sessionFactory.close(); }            
            return resultado;
	}
       
	@Override
	public List<SauUsuario> validarUsuarioId(SauUsuario usuario) {
        List<SauUsuario> resultado=null;
	try {           
           resultado= (List<SauUsuario>) sessionFactory.getCurrentSession().createCriteria(SauUsuario.class)
                   .add(Expression.eq("idUsuario", usuario.getIdUsuario()) )
                   .list();
           
            }catch (Exception e) { logger.info("Mensage de Error En: validarUsuarioId() "+e.getMessage());   }
            finally{ sessionFactory.close(); }            
            return resultado;
	}
        
	@Override
	public ArrayList<SauUsuario> buscarUsuarioPrivilegio(String  dato){
        ArrayList<SauUsuario> resultado=null;
	try {           
            resultado= (ArrayList<SauUsuario>) sessionFactory.getCurrentSession()
                    .createSQLQuery("select t.* from sau_persona p, sau_trabajador t "
                    + "where p.id_persona= t.id_persona "
                    + "and upper(p.dni||' '|| p.nombres||' '|| p.apell_paterno ||' '|| p.apell_materno||' '|| p.nombres) like upper(?) ")
                    .addEntity(SauUsuario.class)
                    .setString(0, "%"+dato+"%")
                    .list();          
            }catch (Exception e) { logger.info("Mensage de Error en buscarNombreMenu() "+e.getMessage());   }
            finally{ sessionFactory.close(); }            
            return resultado;
	}        
        
       
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
	
        @Override
	public List amorValor(SauUsuario usuario) {
        List resultado=null;
        
	try {           
            resultado= (List) sessionFactory.getCurrentSession()
                    .createSQLQuery("select DISTINCT a.id_acceso, a.nombre, a.url, a.nro_orden, a.id_menu, m.nombre nombrem, m.alias aliasm from sau_acceso a, sau_menu m where a.id_menu= m.id_menu order by m.alias, a.nro_orden ")
                    .list();
             Iterator iterator = resultado.iterator();
             if(iterator.hasNext()){
             Object[] tuple = (Object[]) iterator.next();
             
//                    logger.info("Acceso id:"+(String) tuple[0]);
//                    logger.info("Nombre Acceso:"+(String) tuple[1]);
//                    logger.info("Alias Menu:"+(String) tuple[6]);
                    
             }
            logger.info("----Si Llego aqui Amor mio----:");
            
            }catch (Exception e) { logger.info("Mensage de Error en validarTrabajadorId() "+e.getMessage());   }
            finally{ sessionFactory.close(); }            
            return resultado;
	}
        
        /*
	@SuppressWarnings("unchecked")
	public List amorValor(SivTrabajador trabajador) {
        List resultado=null;
	try {           
            resultado= (List) sessionFactory.getCurrentSession()
                    .createSQLQuery("select cargo, estado from siv_trabajador where usuario=? ")
                    .setString(0, "davidmp")
                    .list();
             Iterator iterator = resultado.iterator();
             if(iterator.hasNext()){
             Object[] tuple = (Object[]) iterator.next();
                    logger.info("Cargo:"+(String) tuple[0]);
                    logger.info("Estado:"+(String) tuple[1]);
             }
            logger.info("----Si Llego aqui Amor mio----:");
            
            }catch (Exception e) { logger.info("Mensage de Error en validarTrabajadorId() "+e.getMessage());   }
            finally{ sessionFactory.close(); }            
            return resultado;
	}
        */
        
        
        
        
        
        
}